package br.com.dataphonebr.entity;

import java.util.Date;

import br.com.dataphonebr.specification.IGenericSpecification;

public abstract class Entity {
	
	private Long codigo;
	private Date dataCadastro;
	private Date dataAtualizacao;
	private String usuarioCadastro;
	private String usuarioAtualizacao;
	public IGenericSpecification<Entity> specification;
	
	public Entity() {
		super();
	}
	
	public Entity(Long codigo, Date dataCadastro, Date dataAtualizacao,
			String usuarioCadastro, String usuarioAtualizacao) {
		super();
		this.codigo = codigo;
		this.dataCadastro = dataCadastro;
		this.dataAtualizacao = dataAtualizacao;
		this.usuarioCadastro = usuarioCadastro;
		this.usuarioAtualizacao = usuarioAtualizacao;
	}
	public Long getCodigo() {
		return codigo;
	}
	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}
	public Date getDataCadastro() {
		return dataCadastro;
	}
	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}
	public Date getDataAtualizacao() {
		return dataAtualizacao;
	}
	public void setDataAtualizacao(Date dataAtualizacao) {
		this.dataAtualizacao = dataAtualizacao;
	}
	public String getUsuarioAtualizacao() {
		return usuarioAtualizacao;
	}
	public void setUsuarioAtualizacao(String usuarioAtualizacao) {
		this.usuarioAtualizacao = usuarioAtualizacao;
	}
	public String getUsuarioCadastro() {
		return usuarioCadastro;
	}
	public void setUsuarioCadastro(String usuarioCadastro) {
		this.usuarioCadastro = usuarioCadastro;
	}
	public abstract String validate();
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Entity other = (Entity) obj;
		if (codigo == null) {
			if (other.codigo != null)
				return false;
		} else if (!codigo.equals(other.codigo))
			return false;
		return true;
	}


}
